package CustomizeInterface

import (
	"ToolLibray/jwtx"
	"context"
	"property_api/internal/svc"
	"property_api/internal/types"
	"property_api/utils/result"
	"property_service/property_service"

	"github.com/zeromicro/go-zero/core/logx"
)

type UpzdByKeyLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewUpzdByKeyLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpzdByKeyLogic {
	return &UpzdByKeyLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// UpzdByKey 是一个通过键更新数据的业务逻辑处理函数
// 它接收一个 JudgmentConditions 类型的请求参数，返回一个 Response 类型的响应和一个可能的错误
// 函数接收一个指向 UpzdByKeyLogic 结构体的指针和请求参数
//   - Upz: 包含更新条件和数据的结构体指针
//     TableName: 表名
//     JudgmentField: 判断字段
//     JudgmentValue: 判断值
//     AssignmentField: 赋值字段
//     Assignment: 赋值
//     TenantID: 租户ID
//
// 返回响应和错误信息
func (l *UpzdByKeyLogic) UpzdByKey(req *types.JudgmentField) (resp *types.Response, err error) {
	// 判断数据是否缺失
	if (req.TableKey == "") || (req.Assignment == "") {
		resp.Code = 400
		resp.Message = "参数缺失"
		return resp, err
	}
	tenantID := jwtx.GetUserTenantId64(l.ctx)
	TableName, JudgmentField, AssignmentField := "", "", ""
	// 通过判断TableKey，配置不同数据，调用 Upz 函数更新数据
	switch req.TableKey {
	case "PurchaseHasArrived": //采购明细更改库存数量
		TableName = "asset_purchase_detail" //采购明细表
		JudgmentField = "id"                //通过id判断
		AssignmentField = "has_arrived"     //赋值多少
	}
	res, err := l.svcCtx.CustomizeService.Upz(l.ctx, &property_service.JudgmentConditions{
		TableName:       TableName,         //表名
		JudgmentField:   JudgmentField,     //判断字段
		JudgmentValue:   req.JudgmentValue, //判断值
		AssignmentField: AssignmentField,   //赋值字段
		Assignment:      req.Assignment,    //赋值
		TenantID:        tenantID,          //租户ID
	})
	// 如果服务层返回错误，返回统一的错误响应
	if err != nil {
		return result.Err(err).End()
	}
	// 构造并返回成功响应
	resp, err = result.Suc(res).End()
	// 返回成功的响应
	return resp, err
}
